package spring_01_ioc.iocTest;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import spring_01_ioc.ioc.SpringLifeCycle;

public class SpringLifeCycleTest {
	//spring 容器的初始化和销毁
	@Test
	public void testSpringLifeCycle(){
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		SpringLifeCycle hello = (SpringLifeCycle) context.getBean("springLifeCycle");
		hello.sayHello();
		
		//销毁spring容器
		ClassPathXmlApplicationContext classContext = (ClassPathXmlApplicationContext) context;
		classContext.close();
	}
	
	//分析：spring 容器的声明周期
	//1、spring容器创建对象(执行构造函数？)
	//2、执行init方法
	//3、调用自己的方法
	//4、当spring容器关闭的时候执行destroy方法
	//注意：当scope为"prototype"时，调用 close（） 方法时是不会调用 destroy 方法的
}
